---
-- 參數說明
-- KEYS[1]: 用戶購買記錄Set的鍵 (例如: seckill:voucher:users:1)
-- KEYS[2]: 庫存數量的鍵 (例如: seckill:voucher:stock:1)
-- ARGV[1]: 當前嘗試購買的用戶ID
--
-- 回傳值說明 (已按慣例調整)
-- 0: 購買成功
-- 1: 庫存不足
-- 2: 用戶已購買過，屬於重複下單
---

 --1. 判斷用戶是否已購買過
if redis.call('SISMEMBER', KEYS[1], ARGV[1]) == 1 then
    -- 如果返回值是1，表示用戶ID已存在於Set中，為重複下單
    return 2
end

-- 2. 獲取庫存並判斷是否充足
-- 必須先從Redis獲取庫存值，並將其轉換為數字
local stock = tonumber(redis.call('get', KEYS[2]))

-- 檢查庫存是否存在或是否小於等於0
if not stock or stock <= 0 then
    -- 如果庫存不存在或小於等於0，則直接返回庫存不足
    return 1
end

-- 3. 庫存充足，執行扣減
redis.call('DECR', KEYS[2])

-- 4. 將用戶ID加入到已購買的Set集合中
redis.call('SADD', KEYS[1], ARGV[1])

-- 5. 返回0，代表購買成功
return 0